<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>

</body>
<script>
  //promise中我们可以使用then和catch方法处理相应的结果或错误。如果Promise的状态变为resolved，then方法被调用。否则，如果状态变为rejected，catch方法被调用。
  // 什么是 Uncaught(in promise) error
  //问题：Promise.reject()会触发try catch吗？
  //答案：不会，因为reject只是触发catch，并没有抛出错误
  //try catch 只能捕获try中抛出的错误
  // 问题：为什么await Promise.reject()不触发catch
  // 答案：await 后面必须是一个Promise，而不是直接是一个错误
  // 错误：await Promise.reject()
  // 正确：await Promise.reject().then(resolved, rejected)
  //  Promise.reject("reject error") 不会阻止后面的逻辑执行
  // await new Promise((resolve, reject) => {reject('error')}) await 里面的 reject 会阻止后面的逻辑执行
  function resolved (result) {
    console.log('Resolved');
  }

  function rejected (result) {
    console.log(result, "rejected");
  }

  async function test_promise () {
    await Promise.reject("error").then(resolved, rejected)// 加上then不报错 走rejected,console打印
    console.log("gggg");
  }
  // test_promise()

  async function test_try () {
    try {
      const res = await new Promise((resolve, reject) => {
        console.log("声明promise实例");
      })
      console.log("执行了么？？？");
      Promise.reject() // 不执行 因为上面得promise没有resolve也没有reject,所以被永远等待，被挂起了
    } catch (e) {
      console.log("?????catch");
      return Promise.resolve({ type: "catch_error", value: e })
    }
  }

  // test_try()
  async function asyncFunction () {
    try {
      const res = await new Promise((resolve, reject) => {
        reject('error')
        // resolve("20")
      })
      console.log("???res", res);

      await Promise.reject("reject error").catch(e => {
        console.log("??411", e);
      })
      const resolveR = await Promise.resolve(12)
      console.log("2222", resolveR);

    } catch (error) {
      console.log("~~~~", error); // 输出：error
    }
  }
  asyncFunction() // Uncaught(in promise) error

  function rePromise () {
    return Promise.reject("refffPromise")
  }
  rePromise()
  console.log("???触发", Promise.reject("fgdfg").then(res => {
    console.log("DDDDD".res);
  }).catch((err) => {
    console.log(err);
  }));

  console.log("resolve", Promise.resolve("45454").then(res => {
    console.log(res);
  }));

  new Promise((resolve, reject) => {
    reject("错误")
  }).then((res) => { }, (err) => {
    console.log(err);
  })

</script>

</html>